package per.jdz.retryer.annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Retryer {
    // 重试次数
    int maxAttempts() default 3;

    int time() default 1;

    TimeUnit timeUnit() default TimeUnit.SECONDS;

    // 匹配返回值
    String[] result() default {};

    Class[] resultClass() default {};

    // 匹配抛出的异常，以全限定名存储
    Class<? extends Throwable>[] exception() default {};

    String listenerName() default "";

    // 线程池 bean name
    String async() default "";
}
